#include <iostream>
#include <string>
#include <cstring>
#include <vector>
using namespace std;
class Solution {
public:
int findTheLongestSubstring(string s) {
int ans = 0, status = 0, n = s.length();
//定义数组5bit长度,默认值-1,用来M记录每个状态的位置,一共有1<<5-1种状态
vector<int> pos(1 << 5, -1);
//status==0为成功
pos[0] = 0;
//遍历s
for (int i = 0; i < n; ++i) {
if (s[i] == 'a') {
//取反,记录当前状态
status = status ^ 1<<0;
} else if (s[i] == 'e') {
status = status ^ 1<<1;
} else if (s[i] == 'i') {
status = status ^ 1<<2;
} else if (s[i] == 'o') {
status = status ^ 1<<3;
} else if (s[i] == 'u') {
status = status ^ 1<<4;
}
/*
判断是否符合题意:
当pos[status] == -1 说明这个位置还没有记录过,写入当前的坐标
当pos[status] >= 0 说明这个位置有记录,计算是否大于ans,若是,更新ans
0123456
*/
if (pos[status] >= 0) {
//这个状态有记录,说明这个状态出现过,计算长度更新ans
ans = max(ans, i - pos[status] + 1);
} else {
//记录第一次出现这个状态的下标 + 1,因为不能包含
pos[status] = i + 1;
}
}
return ans;
}
};
int main()
{
string inputStr = "eleetminicoworoep";//leetminicowor
Solution solution;
cout << solution.findTheLongestSubstring(inputStr) << endl;
return 0;
}